### chap1 
a<-1
a = 2
a <- 2
b= 3

ls()  #列出对象
ls.str()  #对象基本信息

## ls函数
# 1. ls()函数列出所有变量

#2. 模式匹配
ls(pattern="var")  #所有含有var的变量
rm(a) #删除对象

#3. 以.开始的变量是隐藏的，使用all.names=True 参数来使其显示
ls(all.name=TRUE)

ls  #没有双括号，将显示该函数的内容 (代码)

library()  #查找已经安装的包
library("gtools")  #加载包
search()  #查看已经加载的包

#帮助
?ls
help("ls")

-------------

### chap2 数据读入与整理

vector("numeric", 10)
vector("logical", 10)

numeric(5)
character(3)
?numeric

f <- factor(5:10)
as.numeric(f)
as.numeric(as.character(f))
as.numeric(levels(f))[f]

# 查看数据类型
a <- c(1, 2, 3)
mode(a)  #"numeric"
b <- c("china", "usa", "france")
mode(b)  # "character"

# 因子 (名义变量和有序变量可以使用因子来表示)
a <- factor(1:3)
b <- factor(1:3,levels=1:5)
d <-factor(1:3,labels=c('A','B','C'))

# 时间序列数据
ts(1:10, frequency = 4, start = c(1959, 2))
g <- ts(1:47, frequency = 12, start = c(1959, 2))
print(g,calendar=T)
print(g)

#数组
array(0,dim=c(2,3,2))
z <- array(1:12, dim=c(2,3,2))
dim(z)

#矩阵
matrix(1:12, nrow=2,byrow=T)  #byrow:矩阵的元素是否按行填充，默认为False(按列填充)
matrix(1:12, 4,3,dimnames = list(c('a','b','c','d'),c('e','f','g')))

#列表
Lst <- list(name="Fred", wife="Mary",no.children=3, child.ages=c(4,7,9))
Lst
a <- 1:3; b <- letters[1:7]; c(a,b); list(a,b)


set.seed(250) #随机种子
a = runif(3,min=0,max=100) #均匀分布随机数
# rnorm正态分布 rexp 指数分布 ...
floor(a)   #不大于该数的最大整数
ceiling(a)   #不小于该数的最小整数
round(a,4)  #保留4位小数

rnorm(3)


getwd() #查看工作路径

#读入数据
?"read.xlsx"
??map

library('purrr')
library("openxlsx")
# detach("package:purrr")

data1=read.xlsx("C:/repos/Fyr-learning/data/rank.xlsx",sheet=1)  #直接读取

#读取多个列表的方式
name_sheet=1:10  
re=map(name_sheet, ~read.xlsx("C:/repos/Fyr-learning/data/rank.xlsx",sheet=.))
str(re)  #检查数据框中有哪些数据
re[[1]]

#生成序列数据
1:10
seq(1,10,0.5)
1:10-1  #整体-1

#生成重复数据 rep函数
rep(1,10)
rep(1:2,10)
rep(1:2,each=10)

edit(data1)  #调用文本编辑器修改数据对象
fix(data1)  #会改变data1
data.entry(data1)   #用data.entry()修改了数据框，会转换成列表(list)类型
ls.str(data1)  #详细情况
str(data1)   #数据类型和详细情况



#####子集提取

x <- 1:100
mode(x)
x[1:10]

#向量
x = c(1,2,3,4,5)
x
x[1]
x[1:4]
x[c(1,5)]
x[-2]  #除了2之外的元素
x[2] = 7 #改变第二个元素的值
x

#矩阵
a<-matrix(1:30,6,5,byrow = T)
a
a[1,2]  #第一行第二列
a[2,] #第二行
a[2,c(3,5)]

#列表
lst <- list(name="Fred", wife="Mary",no.children=3, child.ages=c(4,7,9))
names(lst)
lst[1]
lst[[1]]
lst[[4]][2]
lst$wife
lst['wife']  #输出元素内容及其名称

##数据对象合并
class1 <- data.frame(name=c('Tom','Marry','Bob','Mike','Lily'),hight=c(170,165,175,180,158))
class2 <- data.frame(name=c('Lee','Judy','Max','Owen','Jack'),hight=c(170,167,183,185,177))
class3=data.frame(name=c('Jackson','Iris','Edison','Rose','Annie','Julie'),score=c(66,77,76,78,90,89))
class1.1 <- data.frame(name=c('Jackson','Owen','Bob','Mike','Lily'),score=c(90,85,75,80,90))

#rbind 行合并
rbind(class1,class2) #要求字段名称相同

#bind_rows函数(dplyr包)
library(dplyr)
bind_rows(class1,class3)  #对字段名称不同的数据自动补全

#cbind 列合并 （单纯的横向拼接
cbind(class1,class1.1)

#merge 关键字合并
merge(class1,class1.1,by = 'name',all=T)
merge(class1,class1.1,by = 'name',all=F)  #缺失部分数据的不要
merge(class1,class1.1,by = 'name',all.x=T)  #保留x数据集中的id

#join函数（dplyr包）
full_join(class1,class1.1,by='name')
inner_join(class1,class1.1,by='name')  #缺失部分数据的不要
left_join(class1,class1.1,by='name') #左合并
right_join(class1,class1.1,by='name') #右合并